package outrasolucao;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

public class Ambulancia {

	public static void main(String[] args) {
		
		Grafo grafo = new Grafo();
		
		Collection <String> vertices = new ArrayList<>();
		String v0 = "Salgado Filho";
		String v1 = "Bernardo Vieira";
		String v2 = "Romualdo  Galvao";
		String v3 = "Prudente de Morais";
		String v4 = "Sao Josw";
		String v5 = "Alexandrino de Alencar";
		
		vertices.add(v0);
		vertices.add(v1);
		vertices.add(v2);
		vertices.add(v3);
		vertices.add(v4);
		vertices.add(v5);
		
		grafo.addVertice(v0);
		grafo.addVertice(v1);
		grafo.addVertice(v2);
		grafo.addVertice(v3);
		grafo.addVertice(v4);
		grafo.addVertice(v5);
		
		
		grafo.addAresta(v0, v1, new Custo(new Double(2)));
		grafo.addAresta(v0, v2, new Custo(new Double(3)));
		grafo.addAresta(v0, v3, new Custo(new Double(2)));
		
		grafo.addAresta(v1, v0, new Custo(new Double(2)));
		grafo.addAresta(v1, v4, new Custo(new Double(1)));
		grafo.addAresta(v1, v5, new Custo(new Double(2)));
		
		grafo.addAresta(v2, v0, new Custo(new Double(3)));
		grafo.addAresta(v2, v3, new Custo(new Double(4)));

		grafo.addAresta(v3, v0, new Custo(new Double(2)));
		grafo.addAresta(v3, v2, new Custo(new Double(4)));
		grafo.addAresta(v3, v4, new Custo(new Double(2)));
		
		grafo.addAresta(v4, v1, new Custo(new Double(1)));
		grafo.addAresta(v4, v3, new Custo(new Double(2)));
		grafo.addAresta(v4, v5, new Custo(new Double(3)));

		grafo.addAresta(v5, v1, new Custo(new Double(2)));
		grafo.addAresta(v5, v4, new Custo(new Double(3)));
		
		
		for (Vertice vertice : grafo.getVertices()) {
			System.out.println("\n\n"+ vertice.getValor());
			for (Aresta aresta : vertice.getArestas()) {
				System.out.println("\t"+ aresta.getDestino().getValor() +" ["+ aresta.getCusto().getValor() +"]");
			}
		}
		
		System.out.println("");
		
		double somaDistancias = 0;
		double menorSomaDistancias = Double.MAX_VALUE;
		Object verticeMenorSomaDistancia = v0;
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		//todos os vertices devem ser considerados como origem, ou seja, devem ter calculadas 
		//suas distancias em rela��o a todos os outros v�rtices
		for (Object vOrigem :  vertices) {
			somaDistancias = 0;
			
			//calcula a menor distancia do vertice origem em rela��o aos outros v�rtices
			Map<Object, Double> distancias = Grafo.djikitra(grafo, vOrigem);
			
			System.out.println("Origem: "+ vOrigem);
			
			//mostra o resultado das dist�ncias em rela��o aos outros v�rtices
			for (Object vDestino : vertices)	{
				System.out.println("\tDestino: "+ vDestino);// +" ["+ distancias.get(vDestino) +"]");// - "+  getMenorCaminho(vDestino));
				
				//acumula a menor distancia de todos os v�rtices em rela��o ao v�rticeOrigem
				somaDistancias += distancias.get(vDestino);
			}

			System.out.println("Soma de todas as distancias: "+ somaDistancias);
			
			//analisa quem tem a menor soma de distancias, e armazena o v�rtice q a possui.
			if (menorSomaDistancias > somaDistancias) {
				menorSomaDistancias = somaDistancias;
				verticeMenorSomaDistancia = vOrigem;
			}
			

			System.out.println("\n\n");
		}
		
		
		System.out.println("Melhor ponto: "+ verticeMenorSomaDistancia);

	}
	
}
